/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modulo3;

import Acceso.Security;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import java.text.SimpleDateFormat;
import Modelo.DAL.NotificacionRiesgo_DAO;
import Modelo.NotificacionRiesgo;
import java.io.PrintWriter;
import java.util.*;
import org.json.JSONObject;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMessage;

/**
 *
 * @author Francis
 */
public class agregarNRAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
    private static final String FAILURE = "failure";
    private static final String[] ALLOWED = {"Administrador","Gestionar Notificaciones de Riesgo"};

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        if (!Security.validateSession(request, ALLOWED)) {
            Security.privilegeError(response);
            return mapping.findForward("errorPriv");
        }

        agregarNRForm formBean = (agregarNRForm) form;
        String nacionalidad = formBean.getNacionalidad();
        String cedula = formBean.getCedula();
        String cargo = formBean.getCargo();
        String realizadoPor = formBean.getRealizadoPor();
        String fechaNR = formBean.getFechaNR();
        String estado = formBean.getEstado();

        ActionErrors errors = new ActionErrors();
        boolean error = false;

        if (cedula == null || cedula.equals("")) {
            errors.add("cedula_rn_requerido", new ActionMessage("errors.cedula_rn_requerido"));
            saveErrors(request, errors);
            error = true;
        }
        if (realizadoPor == null || realizadoPor.equals("")) {
            errors.add("realizadoPor_rn_requerido", new ActionMessage("errors.realizadoPor_rn_requerido"));
            saveErrors(request, errors);
            error = true;
        }
        if (fechaNR == null || fechaNR.equals("")) {
            errors.add("fechaNR_rn_requerido", new ActionMessage("errors.fechaNR_rn_requerido"));
            saveErrors(request, errors);
            error = true;
        }
        if (estado == null || estado.equals("")) {
            errors.add("estado_rn_requerido", new ActionMessage("errors.estado_rn_requerido"));
            saveErrors(request, errors);
            error = true;
        }

        if (error) {
            return mapping.findForward(FAILURE);
        }

//    ***************** Validacion de Fecha ******************
        try {

            // Se obtiene la fecha actual en el formato del script
            Calendar c = new GregorianCalendar();
            String dia, mes, annio;
            dia = Integer.toString(c.get(Calendar.DATE));
            mes = Integer.toString(c.get(Calendar.MONTH) + 1);
            annio = Integer.toString(c.get(Calendar.YEAR));
            String fechaHoy = dia + "/" + mes + "/" + annio;
            // Fin de obtener la fecha actual

            String DATE_FORMAT = "dd/MM/yyyy";
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
            Date c1 = sdf.parse(fechaHoy);
            Date c2 = sdf.parse(fechaNR);

            // Si la fecha elegida es posterior a la fecha actual
            if (c2.after(c1)) {
                formBean.setError("La fecha de elaboración NO puede ser posterior a la actual. Intente Nuevamente.");
                return mapping.findForward(FAILURE);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
//******************************************************************************

        NotificacionRiesgo nr = new NotificacionRiesgo(nacionalidad, cedula, cargo, realizadoPor, fechaNR, estado);

        int idNR = NotificacionRiesgo_DAO.insertarNR(nr);

        if (idNR == -1) {
            return mapping.findForward(FAILURE);
        }

        response.setContentType("text/json");
        JSONObject id = new JSONObject();
        id.accumulate("id", idNR);

        PrintWriter pw = response.getWriter();
        pw.write(id.toString());
        pw.flush();
        pw.close();

        formBean.setCargo(null);
        formBean.setCedula(null);
        formBean.setEstado(null);
        formBean.setFechaNR(null);
        formBean.setRealizadoPor(null);

        return mapping.findForward(SUCCESS);
    }
}
